<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>冒泡排序</title>
</head>
<body>

</body>
</html>

<script>
  /*
  * 冒泡排序两两比较，互换位置
  * 每次循环最大的数移动到最后，所以每次循环之后可以少比较一轮外循环
  * 还有一种情况就是，如果数组本来就是有序的，则可以进行判断跳出循环得到优化
  * 正序和逆序可以根据条件进行自行切换
  * */
  const arr = [ 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 ]

  // for循环
  // function bubbleSort (arr) {
  //   for (let i = 0; i < arr.length; i++) {
  //     for (let j = 0; j < arr.length-1-i; j++) {
  //       if (arr[j] > arr[j+1]) {
  //         [ arr[j], arr[j+1] ] = [ arr[j+1], arr[j] ]
  //       }
  //     }
  //     console.log('arr:', arr)
  //   }
  //   return arr
  // }
  /*
  * while 条件语句不能写arr.length,要先赋值
  * 比如： while (arr.length--)是错误的，let len = arr.length while (len--)是正确的
  * */
  function bubbleSort (arr) {
    let isOrder = true
    let len = arr.length
    while (len--) {
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] > arr[i+1]) {
          [ arr[i], arr[i+1] ] = [ arr[i+1], arr[i] ]
          isOrder = false
        }
      }
      // 有序的数组直接返回
      if (isOrder)  {
        return arr
      }
    }
    return arr
  }
  console.log('bubbleSort(arr):', bubbleSort(arr))
</script>